package work931;

/**
 * @author chenmin
 * @desc TODO
 * @date 2025/9/3
 *
 * 1、定义一个英雄类Hero，可以通过这个类创建英雄角色
 * 属性：
 *     游戏角色拥有昵称name，等级level，血量blood，攻击力power，防御力defence，种族kind，
 *     英雄 Equip（只能装3个英雄，初始没有英雄）。
 * 方法：
 *     游戏角色拥有基本攻击方法（拥有一定几率打出暴击）attack(Monster m)，
 *     死亡判定方法isDead()，
 *     添加英雄的方法addEquip(Equip e)，
 *     获取角色信息的方法show()。
 *
 * 设计：
 * 1.关联关系  一对多关联英雄 Equip
 * 2.依赖关系  attack(Monster m) 、 addEquip(Equip e)
 *
 * 作业：
 * 面向对象思想 + 代码复用性  进行优化代码
 */
public class Hero extends Role {

    //一对多关联英雄  数组默认下标从0开始
    private Equip[] equips = new Equip[3];
    //英雄的计数器
    private int index = 0;

    /**
     * 游戏角色拥有基本攻击方法（拥有一定几率打出暴击）
     * @param m  怪兽
     */
    public void attack(Monster m){
        //产生1-10的随机数，一旦大于6，产生三倍的暴击
        int random = (int)(Math.random()*10+1);
        int block = 0;
        if(random>6){
            block = random*3;
        }

        //攻击方法
        //计算本回合的怪兽失血量 = 英雄的攻击力 + 暴击率 - 怪兽的防御力
        int blood = this.power + block - m.getDefence();
        if(blood>0){
            //计算怪兽的失血量
            m.setBlood(m.getBlood() - blood);
            System.out.println("本回合怪兽失血量为："+blood +" , 剩余血量："+m.getBlood());
        }else{
            System.out.println("本回合攻击无效");
        }
    }

    /**
     * 添加装备的方法
     * @param e  装备的对象
     */
    public void addEquip(Equip e){
        if(index>=equips.length){
            System.out.println("装备已满");
            return;
        }

        //添加装备
        equips[index++] = e;
        //合并攻击力
        this.power+=e.getPower();
        //合并防御力
        this.defence+=e.getDefence();
    }

    @Override
    public void show(){
        super.show();
        System.out.println("========= 装备信息 =========");
        for (int i = 0; i < index; i++) {
            System.out.println("========= 第"+(i+1)+"装备 =========");
            equips[i].show();
        }
    }

    public Hero() {
        super();
    }

    public Hero(String name, int level, int blood, String kind, int power, int defence) {
        super(name, level, blood, kind, power, defence);
    }

    public Hero(String name, int level, int blood, String kind, int power, int defence, Equip[] equips, int index) {
        super(name, level, blood, kind, power, defence);
        this.equips = equips;
        this.index = index;
    }

    /**
     * 获取
     * @return equips
     */
    public Equip[] getEquips() {
        return equips;
    }

    /**
     * 设置
     * @param equips
     */
    public void setEquips(Equip[] equips) {
        this.equips = equips;
    }

    /**
     * 获取
     * @return index
     */
    public int getIndex() {
        return index;
    }

    /**
     * 设置
     * @param index
     */
    public void setIndex(int index) {
        this.index = index;
    }

    @Override
    public String toString() {
        return "Hero{name = " + name + ", level = " + level + ", blood = " + blood + ", kind = " + kind + ", power = " + power + ", defence = " + defence + ", equips = " + java.util.Arrays.toString(equips) + ", index = " + index + "}";
    }
}
